In the software development field, an “application” generally is a portfolio of software routines which is designed to meet a customer's specific requirements or perform a collection of related business functions. The word “application” can be used interchangeably with the phrase “application software.” Also, in the software development field, a “project” generally is a collection of work tasks, with each task having a specific start and end date and a specific software product to be delivered.
All work performed on an application by systems engineers, programmers, managers and support staff may be classified into three categories: development, enhancement and maintenance services. Development services can include the creation of new solutions to problems solved by an existing application, or the replacement of an existing application. Essentially, a new application can be developed as one project, or it can be developed in phases, with a deliverable for each phase. Enhancement services can include the creation, installation and integration of new system functions, typically in response to a customer's or user's changes in requirements. These services can include any new functions that are needed to improve efficiency or enhance the level of service that the application provides. Maintenance services can include the correction of errors caused by any of a variety of different items or tasks, including, but not limited to, software programs, hardware, networks, scheduling, job control language, and software upgrades or changes. Maintenance can also include the correction of an application that fails to perform to the original functional specifications.
In pricing conventional application development, enhancement and maintenance contracts, the contractors (those who develop, produce and market application software) estimate the cost and price of new developments, enhancements or the maintenance of applications, by estimating the time and staff that will be needed to perform the development, enhancement or maintenance tasks. One frequently used costing technique is to estimate the number of staff full-time equivalents (FTEs) needed to perform the tasks. One FTE is equal to one month of effort (e.g., 12 FTEs equal one staff year). However, these FTE-based estimates are highly subjective and typically inaccurate. The primary problem with effort-based or FTE-based estimates is that they are unique to specific projects. Such an estimate does not constitute a normalized or standardized method which can be used by customers and vendors for enterprise-wide planning and forecasting. It does not provide any notion of the output relative to the effort incurred or the enterprise-wide value delivered to the customer. In a customer-vendor relationship, effort-based costing is not conducive to savings based on improved productivity and decreases in effort. Moreover, numerous external factors (e.g., project schedule, required reusability, reliability, work environment, user communication, project risk) can contribute to the ultimate cost of an application development, enhancement or maintenance project, which are not controllable during the project, and therefore, cannot be accounted for adequately with an FTE-based estimate.
Conventional application development, enhancement and maintenance projects are typically bid as either “fixed price” or “time and materials” contracts. Since the price is “capped” in a fixed priced contract, the contract “risk” is borne by the contractor who has bid with an FTE-based estimate. The primary problem with a fixed price contract is that it does not provide any flexibility with respect to requirements changes. Conversely, the “risk” in an FTE-based “time and materials” contract is borne by the customer. Consequently, because of the difficulties inherent in FTE-based estimating, the “risk” found in inaccurate pricing of application development, enhancement and maintenance projects has long been seen as a significant problem to be corrected, from both the contractors' and customers' points of view.